﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;
using DiscountsBLL;
using DevExpress.XtraEditors.Controls;
using System.Collections;
using DevExpress.XtraGrid.Views.Base;
using DiscountsDAL;

//using DiscountsDAL;


namespace DiscountUI
{
    public partial class frmDiscounts : Form
    {
        IQueryable iqDate, iqDateNoChange; //, iqDateSelectAll;
        System.Guid uidSession;
        PreSelectdProductEO prSelProdEo;
        System.Boolean bCheck = true;
        private System.Guid uidAction = System.Guid.Empty;
        bool bIsStock=false;
        private bool bIsSelectBindingEntity = false;

        private List<GoodDiscountLinkEO> lstGoodDiscountLinkForAdd;
        //private List<GoodDiscountLinkEO> lstGoodDiscountLinkForDelete;
        private List<Guid> lstGuidGdlForDelete;
        

        private List<PharmacyLinkEO> lasPharmLinkForAdd;
        private List<PharmacyLinkEO> lasPharmLinkForDel;

        private List<PharmacyLinkEO> lasPharmLink;
        private List<PharmacyLinkEO> lasPharmLinkForSave;


        private List<PharmacyEO> lstPharmacyEO; 
        
        private DiscountCountGoodsEO DisCountGoodsEO;
        private List<DiscountCountGoodsEO> lstDiscountCountGoodsEo;
        private List<DiscountCountGoodsEO> lstDiscountCountGoodsEoForSave;
        private List<DiscountCountGoodsEO> lstDiscountCountGoodsEoForDel;

        private List<DiscountTimeEO> lstDiscountTimeEo;
        private List<DiscountTimeEO> lstDiscountTimeEoForSave;
        private List<DiscountTimeEO> lstDiscountTimeEoForDel;

        private List<ActionEO> lstActionEO;
        private List<ActionEO> lstActionEOForDel;
        private List<ActionEO> lstActionEOForSave;

        //--
        private List<string> lstStrGroupForSave;

        private List<GroupEO> lstGroupEoForSave;
        private List<SubGroupEO> lstSubGroupEoForSave;
        private List<TrademarkEO> lstTradeMarkEoForSave;
        private List<LineEO> lstLineEoFoSave;
        private List<ProducerEO> lstProducerEoForSave; 
        //--



        public frmDiscounts()
        {
            InitializeComponent();

            // загружаем 'справочники'

            LoadPharmacyList();
            //LoadActionGrid();
            LoadActionList();
            // закоментированно 03.02.2013
            //LoadGroupList();
            //LoadSubGroupList();
            //LoadTradeMarkList();
            //LoadLineList();
            //LoadInternalGroupList();
            //LoadProduserList();           
        }


        private void LoadActionList()
        {
            ActionEO actionEO = new ActionEO();

            #region Old

            //trPharm.DataSource = pharm.GetPharmacyList();   // старый вариант загрузки   

            // -- новый вариант загрузки с записью объекта в tag  --
            //lstPharmacyEO = pharm.GetPharmacyList();
            //if (lstPharmacyEO != null)
            //{
            //    trDiscountCount.Nodes.Clear();
            //    foreach (PharmacyEO item in lstPharmacyEO)
            //    {
            //        DevExpress.XtraTreeList.Nodes.TreeListNode objNode = trPharm.AppendNode(new object[] { item.Id, false, item.Name }, null);
            //        objNode.Tag = item;
            //    }
            //}

            #endregion

            lstActionEO= actionEO.GetActionListNoDelete();
            if (lstActionEO != null)
            {
                trAction.Nodes.Clear();
                foreach (ActionEO item in lstActionEO)
                {
                    DevExpress.XtraTreeList.Nodes.TreeListNode objNode = trAction.AppendNode(new object[] { item.GuidId, item.Name, item.Discription, item.IsDelete, item.IsActive, item.TimeBegin, item.TimeEnd,item.IsEntity }, null);
                    objNode.Tag = item;
                }
            }

            // загружаю список акций, в которых может участвовать товар (только для привязки товара по Uid, привязка по признакам товара(группа, подгруппа) не реализованна )
            LoadreItemLookUpEditUsedAction();

        }

        /// <summary>
        /// Загрузка Групп
        /// </summary>
        private void LoadGroupList(GroupEO grEo)
        {
            //GroupEO groupEO = new GroupEO();         
            //chkCboxGroup.Properties.DataSource = groupEO.GetGroupList(); 
            // ВНИМАНИЕ !!! 
            // Если загружать через DataSource, то не заполняются Item. Загружать данные нужно в цикле построчно см. ниже

            // заполняем выпадающий список 
            foreach (var item in grEo.GetGroupList())
            {
                chkCboxGroup.Properties.Items.Add(item, false);
            }
        }

        /// <summary>
        ///  Загрузка подгрупп
        /// </summary>
        /// <param name="subGrEo"></param>
        private void LoadSubGroupList(SubGroupEO subGrEo)
        {
            //SubGroupEO subGroupEO = new SubGroupEO();
            //chkCboxSubGroup.Properties.DataSource = subGroupEO.GetSubGroupList();

            // заполняем выпадающий список 
            foreach (string item in subGrEo.GetSubGroupList())
            {
                chkCboxSubGroup.Properties.Items.Add(item, false);
            }
        }

        private void LoadTradeMarkList(TrademarkEO trMarkEo)
        {
            //TrademarkEO trademarkEO = new TrademarkEO();
            //chkCboxTradeMark.Properties.DataSource = trademarkEO.GetTradeMarkList();

            foreach (string item in trMarkEo.GetTradeMarkList())
            {
                chkCboxTradeMark.Properties.Items.Add(item, false);
            }
        }

        private void LoadLineList(LineEO lineEo)
        {
            //LineEO lineEO = new LineEO();
            //chkCboxLine.Properties.DataSource = lineEO.GetLineList();

            foreach (string item in lineEo.GetLineList())
            {
                chkCboxLine.Properties.Items.Add(item, false);
            }

        }

        private void LoadInternalGroupList()
        {
            InternalGroupEO intGrEo = new InternalGroupEO();
            chkCboxInternalGroup.Properties.DataSource = intGrEo.GetInternalGroupList();
            chkCboxInternalGroup.Properties.ValueMember = "Group_ID";
            chkCboxInternalGroup.Properties.DisplayMember = "Group_Name";

            #region old
            // Рабочий вариант с lookUpEdit. Но не используется, т.к. не поддержвает множественный выбор
            /*
            InternalGroupEO intGrEo1 = new InternalGroupEO();
            lookUpEditInternalGroup.Properties.DataSource = intGrEo1.GetInternalGroupList();

            lookUpEditInternalGroup.Properties.Columns.AddRange(new LookUpColumnInfo[] { 
                new LookUpColumnInfo("Group_NO", "№ группы", 15 ,DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Default, DevExpress.Data.ColumnSortOrder.None),        
                new LookUpColumnInfo("Group_Name", "Группа", 30, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Default, DevExpress.Data.ColumnSortOrder.None)          
            });

            lookUpEditInternalGroup.Properties.DisplayMember = "Group_Name";
            lookUpEditInternalGroup.Properties.ValueMember = "Group_ID";

            lookUpEditInternalGroup.Properties.BestFitMode = BestFitMode.BestFitResizePopup;
            */
            #endregion
        }


        private void LoadProduserList()
        {
            ProducerEO prodEo = new ProducerEO();

            //var rrr= prodEo.GetProducerList();

            /*List<Tuple<int, string, int, System.Guid>>*/ //var lstTemp;
            //var lstTemp = prodEo.GetProducerList();

            chkCboxProducer.Properties.DataSource = prodEo.GetProducerList();
            chkCboxProducer.Properties.ValueMember = "Producer_Uid"; //"Item4" /*"dcProducer_ID";*/ /*"Producer_ID"*/ /*"Producer_Uid"*/;
            chkCboxProducer.Properties.DisplayMember = "Producer_name"; //"Item2"; // *"dcProducer_name"; */ "Producer_name";

            LoadProduserListForLookUpEditProducer(prodEo); // временно закоментил, для теста 25.06.13
        }

        /// <summary>
        ///  Загружаем производителя для reItemLookUpEditProducer
        /// </summary>
        private void LoadProduserListForLookUpEditProducer(ProducerEO prodEo)
        {
            if (reItemLookUpEditProducer.Properties.DataSource != null) return;

            reItemLookUpEditProducer.Properties.DataSource = prodEo.GetProducerList();

            reItemLookUpEditProducer.Properties.Columns.AddRange(new LookUpColumnInfo[] { 
                new LookUpColumnInfo("Producer_No", "№ группы", 15 ,DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Default, DevExpress.Data.ColumnSortOrder.None),        
                new LookUpColumnInfo("Producer_name", "Группа", 30, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Default, DevExpress.Data.ColumnSortOrder.None)          
            });

            reItemLookUpEditProducer.Properties.DisplayMember = "Producer_name";
            reItemLookUpEditProducer.Properties.ValueMember = "Producer_ID";
        }

        /// <summary>
        /// Загружаю список акций для reItemLookUpEditUsedAction
        /// </summary>
        private void LoadreItemLookUpEditUsedAction()
        {
            GoodDiscountLinkEO goodDiscountLinkEO = new GoodDiscountLinkEO();

            reItemLookUpEditUsedAction.Properties.DataSource = goodDiscountLinkEO.GetGoodDiscountLinkAndActionName();

            reItemLookUpEditUsedAction.Properties.Columns.AddRange(new LookUpColumnInfo[] { 
                /*new LookUpColumnInfo("whGoodUid", "Guid", 15 ,DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Default, DevExpress.Data.ColumnSortOrder.None),*/        
                new LookUpColumnInfo("Name", "Акция", 30, DevExpress.Utils.FormatType.None, "", true, DevExpress.Utils.HorzAlignment.Default, DevExpress.Data.ColumnSortOrder.None)          
            });

            reItemLookUpEditUsedAction.Properties.DisplayMember = "Name";
            reItemLookUpEditUsedAction.Properties.ValueMember = "whGoodUid";
        }


        private void LoadPharmacyList()
        {
            PharmacyEO pharm = new PharmacyEO();
            //trPharm.DataSource = pharm.GetPharmacyList();   // старый вариант загрузки   
            
            // -- новый вариант загрузки с записью объекта в tag  --
            lstPharmacyEO = pharm.GetPharmacyList();
            if (lstPharmacyEO != null)
            {
                trDiscountCount.Nodes.Clear();
                foreach (PharmacyEO item in lstPharmacyEO)
                {
                    DevExpress.XtraTreeList.Nodes.TreeListNode objNode = trPharm.AppendNode(new object[] { item.Id, false, item.Name }, null);
                    objNode.Tag = item;
                }
            }
        }
        
        //private void LoadTest()
        //{
        //    BindingSource bindingSourceProduct = new BindingSource();
        //    bindingSourceProduct.DataSource = CreateTable(20);
        //    chkCboxProducer.Properties.DataSource = bindingSourceProduct.DataSource;
        //    //Init 
        //    chkCboxProducer.Properties.ValueMember = "ProductId";
        //    chkCboxProducer.Properties.DisplayMember = "ProductName";
        //    chkCboxProducer.Properties.NullText = string.Empty;
        //    //Binding
        //    chkCboxProducer.DataBindings.Add("EditValue", bindingSourceProduct, "ProductName", true, DataSourceUpdateMode.OnPropertyChanged);
        //    //chkTest.DataBindings.Add("EditValue", bindingSourceProduct, "ProductId", true,DataSourceUpdateMode.OnPropertyChanged);

        //}

        //private static DataTable CreateTable(int RowCount)
        //{
        //    DataTable tbl = new DataTable();
        //    tbl.Columns.Add("ProductName", typeof(string));
        //    tbl.Columns.Add("ProductId", typeof(int));
        //    tbl.Columns.Add("Number", typeof(int));
        //    tbl.Columns.Add("Date", typeof(DateTime));
        //    for (int i = 0; i < RowCount; i++)
        //        tbl.Rows.Add(new object[] { String.Format("Name{0}", i), i+2, 3 - i, DateTime.Now.AddDays(i) });
        //    return tbl; 
        //}

        private void chkCboxGroup_EditValueChanged(object sender, EventArgs e)
        {
            var yy= chkCboxGroup.Properties.GetCheckedItems();
            var yy1 = chkCboxGroup.EditValue ;
        }



        private void chkTest_EditValueChanged(object sender, EventArgs e)
        {
            var t = chkCboxProducer.Properties.ValueMember;
            var tt = chkCboxProducer.Properties.DisplayMember;

            var yy = chkCboxProducer.Properties.GetCheckedItems();
        }

        private void chkCboxInternalGroup_EditValueChanged(object sender, EventArgs e)
        {
            var yu= chkCboxInternalGroup.Properties.GetCheckedItems();
        }

        //private void InitializationObject()
        //{
        //    GroupEO groupEO = new GroupEO();
        //    TrademarkEO trademarkEO = new TrademarkEO();
        //    SubGroupEO subGroupEO = new SubGroupEO();
        //    LineEO lineEO = new LineEO();
        //    InternalGroupEO intEO = new InternalGroupEO();
        //    ProducerEO prodEO = new ProducerEO();
        //}

        private void btnWhere_Click(object sender, EventArgs e)
        {
            try
            {
                // генерируем новый guid сесии 
                uidSession = System.Guid.NewGuid();
                
                string strGroup = chkCboxGroup.Properties.GetCheckedItems().ToString();
                    // получаем строку с выбранными в chkCboxGroup элементами
                string strTradeMark = chkCboxTradeMark.Properties.GetCheckedItems().ToString();
                string strSubGroup = chkCboxSubGroup.Properties.GetCheckedItems().ToString();
                string strLine = chkCboxLine.Properties.GetCheckedItems().ToString();
                string strInternalGroup = chkCboxInternalGroup.Properties.GetCheckedItems().ToString();
                    //.Properties.GetCheckedItems().ToString();
                string strProducerGroup = chkCboxProducer.Properties.GetCheckedItems().ToString();


                GroupEO groupEO = new GroupEO();
                TrademarkEO trademarkEO = new TrademarkEO();
                SubGroupEO subGroupEO = new SubGroupEO();
                LineEO lineEO = new LineEO();
                InternalGroupEO intEO = new InternalGroupEO();
                ProducerEO prodEO = new ProducerEO();


                List<GroupEO> listGroup = groupEO.GetGroupList(strGroup, uidSession); // по строке получаем лист типа List<GroupEO>
                List<TrademarkEO> listTrademark = trademarkEO.GetTradeMarkList(strTradeMark, uidSession);
                List<SubGroupEO> listSubGroup = subGroupEO.GetSubGroupList(strSubGroup, uidSession);
                List<LineEO> listLineEO = lineEO.GetLineList(strLine, uidSession);
                List<InternalGroupEO> listInternalGroup = intEO.GetInternalGroupList(strInternalGroup, uidSession);
                List<ProducerEO> listProducer = prodEO.GetProducerList(strProducerGroup, uidSession);

                groupEO.Insert(listGroup); // сохраняем строки в БД
                trademarkEO.Insert(listTrademark);
                subGroupEO.Insert(listSubGroup);
                lineEO.Insert(listLineEO);
                intEO.Insert(listInternalGroup);
                prodEO.Insert(listProducer);

                if (radioGroupSelectFilter.SelectedIndex == 1)
                {
                    string strSelectGroup = chkCboxGroup.Properties.GetCheckedItems().ToString();

                    // конвертируем из string в List<string> разделителем строк должна быть '^'
                    lstStrGroupForSave = strSelectGroup.Trim().Split('^').ToList();

                    lstGroupEoForSave = groupEO.GetGroupList(strGroup, System.Guid.Empty);
                    lstSubGroupEoForSave = subGroupEO.GetSubGroupList(strSubGroup, System.Guid.Empty);
                    lstTradeMarkEoForSave = trademarkEO.GetTradeMarkList(strTradeMark, System.Guid.Empty);
                    lstLineEoFoSave = lineEO.GetLineList(strLine, System.Guid.Empty);
                    lstProducerEoForSave = prodEO.GetProducerList(strProducerGroup, Guid.Empty);

                }

                //PreSelectdProductEO prSelProdEo = new PreSelectdProductEO();
                prSelProdEo = new PreSelectdProductEO();
                iqDateNoChange = prSelProdEo.GetPreSelectdProduct(uidSession, bIsStock);
                grdPreSelect.DataSource = iqDateNoChange; // ориганальный вариант 
                iqDate = prSelProdEo.GetListPosition(iqDateNoChange);
                
                #region old

                //iqDate = prSelProdEo.GetPreSelectdProduct(uidSession);
                //iqDateSelectAll = iqDate;
                //after = iqDate;
                //iqDate = null;
                //iqDateSelectAll = prSelProdEo.GetDTSourceWhiteCheckAllPosition(iqDate);
                //iqDate = prSelProdEo.GetPreSelectdProduct(uidSession);
                //u = prSelProdEo.GetDTSourceWhiteCheckAllPosition(iqDate);
                //IQueryable iqDate11 = prSelProdEo.GetPreSelectdProduct(uidSession);
                //u= prSelProdEo.GetDTSourceWhiteCheckAllPosition(iqDate);
                //iqDate = null;
                //grdPreSelect.DataSource = prSelProdEo.GetTemp(iqDate); ; 

                #endregion
                
                // удаляем
                groupEO.Delete(listGroup);
                trademarkEO.Delete(listTrademark);
                subGroupEO.Delete(listSubGroup);
                lineEO.Delete(listLineEO);
                intEO.Delete(listInternalGroup);
                prodEO.Delete(listProducer);
                
            }
            catch (Exception e2)
            {
                ShowError(e2);
            }
        }

        private void ShowError(Exception ex)
        {
            MessageBox.Show("Возникла ошибка: " + ex.Message , "Jet-Discount", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void btnTransferSelectRow_Click(object sender, EventArgs e)
        {
            int i;
            List<int> lstChk = new List<int>();

            if (grdPreSelectView.DataRowCount==0)
            {
                MessageBox.Show("Позиции не выбраны", "Jet-Discount", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            if (prSelProdEo.listwhGood == null)
            {
                prSelProdEo.listwhGood = new List<DiscountsDAL.whGood>();
            }

            for (i = 0; i < grdPreSelectView.DataRowCount; i++)
            {

                if (Convert.ToBoolean(grdPreSelectView.GetRowCellValue(i,"whGood_Sel"))) // если элемент выбран
                {
                    if (!IsDublicatePosition(i))
                    {
                        prSelProdEo.listwhGood.Add((DiscountsDAL.whGood)grdPreSelectView.GetRow(i));
                        CreateListGoodDiscountLink(i);
                        lstChk.Add(i);
                    }
                    else
                    {
                        lstChk.Add(i);
                    }
                }
            }

            LoadgrdSelect(); // загружаем отобранные позиции в грид
            UncheckgrdSelect(lstChk);  // снимем выделение 
        }

        private bool IsDublicatePosition(int iRow)
        {
            for (int j = 0; j < grdSelectView.DataRowCount; j++)
            {
                //var a = grdPreSelectView.GetRowCellValue(i, colPreSelectWhGoodUID).ToString();
                //var b = grdSelectView.GetRowCellValue(j, colSelectWhGoodUID).ToString();

                if (Guid.Parse(grdPreSelectView.GetRowCellValue(iRow, colPreSelectWhGoodUID).ToString()) ==
                    Guid.Parse(grdSelectView.GetRowCellValue(j, colSelectWhGoodUID).ToString()))
                {
                    return true;
                }
                
            }
            return false;
        }

        private void LoadgrdSelect()
        {




            if (grdSelectView.DataRowCount == 0)
            {
                if (prSelProdEo != null && prSelProdEo.listwhGood != null)
                {
                    grdSelect.DataSource = prSelProdEo.listwhGood;
                }
                return;
            }

            if (prSelProdEo.listwhGood != null && prSelProdEo.listwhGood.Count>0)
            {
                // если в grdSelectView уже есть записи, то эти записи добавляем в prSelProdEo.listwhGood
                // к тем, которые уже имеются в нем
                if (grdSelectView.DataRowCount > 0)
                {
                    for (int i = 0; i < grdSelectView.DataRowCount; i++)
                    {
                        prSelProdEo.listwhGood.Add((DiscountsDAL.whGood)grdSelectView.GetRow(i));
                    }
                    grdSelect.DataSource = prSelProdEo.listwhGood;
                }
            }
        }

        /// <summary>
        /// Снимаем выделение с grdSelect
        /// </summary>
        /// <param name="lstChk">list типа int</param>
        private void UncheckgrdSelect(List<int> lstChk)
        {
            foreach (int j in lstChk)
            {
                grdPreSelectView.SetRowCellValue(j, colPreSelectSelectCheck, CheckState.Unchecked);
            }
        }

        /// <summary>
        /// Создаем и заполняем lstNEWGoodDiscountLink (лист с новыми товарами)
        /// </summary>
        /// <param name="i"></param>
        private void CreateListGoodDiscountLink(int i)
        {
            try
            {
                if (lstGoodDiscountLinkForAdd == null) lstGoodDiscountLinkForAdd = new List<GoodDiscountLinkEO>();
                
                GoodDiscountLinkEO gdl = new GoodDiscountLinkEO();
                
                gdl.whGood_Id = Convert.ToInt32(grdPreSelectView.GetRowCellValue(i, colPreSelectWhGoodId));
                gdl.whGood_Uid = System.Guid.Parse((grdPreSelectView.GetRowCellValue(i, colPreSelectWhGoodUID).ToString()));
                
                //gdl.A_Guid = System.Guid.Parse(grdActionView.GetRowCellValue(Convert.ToInt32(grdActionView.GetSelectedRows().Single()), clGuidgrdAction).ToString());
                //gdl.A_Guid = System.Guid.Parse((trAction.Nodes[i].GetValue(clGuidAction).ToString())); 

                gdl.A_Guid = System.Guid.Parse(trAction.FocusedNode.GetValue(clGuidAction).ToString()); // получаем GUID выделенной строки в trAction
                
                lstGoodDiscountLinkForAdd.Add(gdl);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString(), "Jet-Скидки", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }          
        }

        private void grdPreSelectView_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
        {
            if (e.Column.FieldName == "whGood_Sel")
            {
                if (e.IsGetData)
                {
                    
                }
                //    e.Value = unboundData[e.ListSourceRowIndex];
                //else
                //    unboundData[e.ListSourceRowIndex] = e.Value;
            }
        }

        private void repItemChkSelect_EditValueChanging(object sender, ChangingEventArgs e)
        {
            var t= e.NewValue;
            var y = e.OldValue;
        }

        private void btnSelectAll_Click(object sender, EventArgs e)
        {
            if (grdPreSelectView.DataRowCount == 0)
            {
                MessageBox.Show("Позиции не выбраны", "Jet-Скидки", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            prSelProdEo = new PreSelectdProductEO();
            //iqDateSelectAll = prSelProdEo.GetDTSourceWhiteCheckAllPosition(iqDate);
            grdPreSelect.DataSource = prSelProdEo.GetDTSourceWhiteCheckAllPosition(iqDate, bCheck); //iqDateSelectAll
            bCheck = !bCheck;
        }


        private void barBtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            grdPreSelectView.AddNewRow();

        }

        #region Контекстное меню

        #region Обработчики событий

        private void trDiscountCount_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Button == MouseButtons.Right)
                {
                    // попробуем определить, что же у нас под мышкой
                    TreeListHitInfo hi =
                        ((TreeList) sender).CalcHitInfo(new Point(e.X, e.Y));
                    if ((hi == null) || (hi.Node == null))
                    {
                        mItemDisCountDelete.Enabled = false;
                    }
                    else
                    {
                        // выделяем узел
                        mItemDisCountDelete.Enabled = true;
                        hi.Node.TreeList.FocusedNode = hi.Node;
                    }
                    contMenuDisCount.Show(((TreeList) sender), new Point(e.X, e.Y));

                }
            }
            catch (Exception f)
            {
                MessageBox.Show("trDiscountCount_MouseClick. Текст ошибки: " + f.Message);
                //SendMessageToLog("trDiscountCount_MouseClick. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void mItemDisCountAdd_Click(object sender, EventArgs e)
        {
            try
            {
                AddDisCountItem();
            }
            catch (Exception f)
            {
                MessageBox.Show("mitemAddPhone_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void mItemDisCountDelete_Click(object sender, EventArgs e)
        {
            try
            {
                DeleteDisCountItem(trDiscountCount.FocusedNode);
            }
            catch (Exception f)
            {
                //SendMessageToLog("mitemDeletePhone_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void trDiscountTime_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Button == MouseButtons.Right)
                {
                    // попробуем определить, что же у нас под мышкой
                    TreeListHitInfo hi = ((TreeList)sender).CalcHitInfo(new Point(e.X, e.Y));
                    if ((hi == null) || (hi.Node == null))
                    {
                        mItemDisTimeDelete.Enabled = false;
                    }
                    else
                    {
                        // выделяем узел
                        mItemDisTimeDelete.Enabled = true;
                        hi.Node.TreeList.FocusedNode = hi.Node;
                    }
                    contMenuDisTime.Show(((TreeList)sender), new Point(e.X, e.Y));
                }
            }
            catch (Exception f)
            {
                MessageBox.Show("trDiscountTime_MouseClick. Текст ошибки: " + f.Message);
                //SendMessageToLog("trDiscountCount_MouseClick. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void mItemDisTimeAdd_Click(object sender, EventArgs e)
        {
            try
            {
                AddDisTimeItem();
            }
            catch (Exception f)
            {
                MessageBox.Show("trDiscountTime_MouseClick.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void mItemDisTimeDelete_Click(object sender, EventArgs e)
        {
            try
            {
                DeleteDisTimeItem(trDiscountTime.FocusedNode);
            }
            catch (Exception f)
            {
                //SendMessageToLog("mitemDeletePhone_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        #endregion

        #region Методы Add/Delete

        /// <summary>
        /// Добавляет в список скидку по количеству
        /// </summary>
        private void AddDisCountItem()
        {
            try
            {
                if (trDiscountCount.Enabled == false) { trDiscountCount.Enabled = true; }
                
                Boolean bNotFullNode = false;

                // если есть строка которая не заполнена значениями
                foreach (TreeListNode objItem in trDiscountCount.Nodes)
                {
                    if (Convert.ToInt32(objItem.GetValue(cCountBegintrDiscountCount)) == 0 && Convert.ToInt32(objItem.GetValue(cCountEndtrDiscountCount)) == 0)
                    {
                        trDiscountCount.FocusedNode = objItem;
                        bNotFullNode = true;
                        break;
                    }
                }
                if (bNotFullNode == true) { return; }

                DiscountCountGoodsEO discountCountGoods = new DiscountCountGoodsEO();
                
                TreeListNode objNode = trDiscountCount.AppendNode( new object[] { discountCountGoods.Dcg_Guid /*здесь по умолчанию будет Guid.Empty()*/, discountCountGoods.Dcg_CountValueMin, discountCountGoods.Dcg_CountValueMax, discountCountGoods.Dcg_PercentDiscount, discountCountGoods.Dcg_IsActive }, null);
                objNode.Tag = discountCountGoods;
                trDiscountCount.FocusedNode = objNode;
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка добавления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        /// <summary>
        /// Добавляет в список скидку по времени действия
        /// </summary>
        private void AddDisTimeItem()
        {
            try
            {
                if (trDiscountTime.Enabled == false) { trDiscountTime.Enabled = true; }
                //if (m_objSelectedCustomer.PhoneList == null) { m_objSelectedCustomer.PhoneList = new List<CPhone>(); }
                Boolean bNotFullNode = false;

                //foreach (TreeListNode objItem in trDiscountTime.Nodes)
                //{
                //    //if ((System.String)objItem.GetValue(colPhoneNumber) == "")
                //    //{
                //    //    trDiscountTime.FocusedNode = objItem;
                //    //    bNotFullNode = true;
                //    //    break;
                //    //}
                //}

                if (bNotFullNode == true) { return; }
                //--------------------------------------
                DiscountTimeEO discountTime = new DiscountTimeEO();
                TreeListNode objNode = trDiscountTime.AppendNode(new object[] {discountTime.Dt_Guid, discountTime.Dt_TimeBegin,discountTime.Dt_TimeEnd, discountTime.Dt_PercentDiscount,discountTime.Dt_IsActive}, null);
                objNode.Tag = discountTime;
                trDiscountTime.FocusedNode = objNode;
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка добавления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }


        /// <summary>
        /// Удаляет из списка
        /// </summary>
        /// <param name="objNode">узел с телефонным номером</param>
        private void DeleteDisCountItem(TreeListNode objNode)
        {
            try
            {
                if ((objNode == null) || (trDiscountCount.Nodes.Count == 0))
                {
                    return;
                }

                if (lstDiscountCountGoodsEoForDel == null) { lstDiscountCountGoodsEoForDel = new List<DiscountCountGoodsEO>(); }

                TreeListNode objPrevNode = objNode.PrevNode;
                lstDiscountCountGoodsEoForDel.Add((DiscountCountGoodsEO)objNode.Tag);

                trDiscountCount.Nodes.Remove(objNode);
                if (objPrevNode == null)
                {
                    if (trDiscountCount.Nodes.Count > 0)
                    {
                        trDiscountCount.FocusedNode = trDiscountCount.Nodes[0];
                    }
                }
                else
                {
                    trDiscountCount.FocusedNode = objPrevNode;
                }

                //SetPropertiesModified(true);
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка удаления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        /// <summary>
        /// Удаляет из списка
        /// </summary>
        /// <param name="objNode">узел</param>
        private void DeleteDisTimeItem(TreeListNode objNode)
        {
            try
            {
                if ((objNode == null) || (trDiscountTime.Nodes.Count == 0))
                {
                    return;
                }

                if (lstDiscountTimeEoForDel == null)
                {
                    lstDiscountTimeEoForDel = new List<DiscountTimeEO>();
                }
                TreeListNode objPrevNode = objNode.PrevNode;
                lstDiscountTimeEoForDel.Add((DiscountTimeEO)objNode.Tag);
                

                trDiscountTime.Nodes.Remove(objNode);
                if (objPrevNode == null)
                {
                    if (trDiscountTime.Nodes.Count > 0)
                    {
                        trDiscountTime.FocusedNode = trDiscountTime.Nodes[0];
                    }
                }
                else
                {
                    trDiscountTime.FocusedNode = objPrevNode;
                }

                //SetPropertiesModified(true);
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка удаления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        #endregion

        #endregion


        private void btnchkListPharmacyInvert_Click(object sender, EventArgs e)
        {
            trPharm.BeginUpdate();
            try
            {
                foreach (TreeListNode objItem in trPharm.Nodes)
                {
                    if ((System.Boolean)objItem.GetValue(cChkPharm) == true)
                    {
                        objItem.SetValue(cChkPharm, CheckState.Unchecked);
                    }
                    else
                    {
                        objItem.SetValue(cChkPharm, CheckState.Checked);
                    }
                }
            }
            finally
            {
                trPharm.EndUpdate();
            }
        }


        private void LoadActionDetail(int iRowHandle)
        {
            bool bIsEntity;
            PreSelectdProductEO goodEO = new PreSelectdProductEO();
            PharmacyEO PharmEO = new PharmacyEO();
            try
            {
                //if (grdActionView.SelectedRowsCount > 0)
                //if (trAction.FocusedNode.Nodes.Count>0)
                if (trAction.FocusedNode.Id != -1)
                {

                    //uidAction = System.Guid.Parse(grdActionView.GetRowCellDisplayText(iRowHandle, grdActionView.Columns["GuidId"])); // для варианта, когда использовался Грид для отображения Акций

                    uidAction = System.Guid.Parse((trAction.Nodes[iRowHandle].GetValue(clGuidAction).ToString())); // получаем GUID выделенной строки в trAction
                    bIsEntity=Convert.ToBoolean((trAction.Nodes[iRowHandle].GetValue(clIsEntity))); // получаем bIsEntity выделенной строки в trAction

                    if (uidAction != System.Guid.Empty)
                    {
                        // загружаем товары, которые привязаны к данной (uid) акции
                        grdSelect.DataSource = goodEO.GetGoodByAction(uidAction);
                        

                        // загружаем скидки по количеству
                        LoadDiscountCountInTreeList(uidAction);
                        
                        // загружаем скидки по времени действия
                        LoadDiscountTimeInTreeList(uidAction);

                        #region Old_загружаем скидки по времени действия
                        //trDiscountTime.DataSource = disTimeEO.GetDiscountTimeByAction(uidAction);
                        //lstDiscountTimeEo = disTimeEO.GetDiscountTimeByAction(uidAction);
                        //if (lstDiscountTimeEo != null)
                        //{
                        //    trDiscountTime.Nodes.Clear();
                        //    foreach (DiscountTimeEO item in lstDiscountTimeEo)
                        //    {
                        //        DevExpress.XtraTreeList.Nodes.TreeListNode objNode = trDiscountTime.AppendNode(new object[] { item.Dt_Guid, item.Dt_TimeBegin, item.Dt_TimeEnd, item.Dt_PercentDiscount, item.Dt_IsActive }, null);
                        //        objNode.Tag = item;
                        //    }
                        //}
                        #endregion


                        // загружаем ответку о выбранной РТТ (аптеке)
                        LoadCheckListPharmacy(uidAction);

                        // загружаем признак для фильтра привязки
                        LoadSelectFilter(bIsEntity);


                        //загружаем набор фильтров по которым выполнялся поиск
                        LoadCheckCBoxGroup(uidAction, bIsEntity);
                        LoadCheckCBoxSubGroup(uidAction, bIsEntity);
                        LoadCheckCBoxLine(uidAction, bIsEntity);

                        LoadCheckCBoxTradeMark(uidAction, bIsEntity);
                        LoadCheckCBoxInternalGroup(uidAction);
                        LoadCheckCBoxProducer(uidAction, bIsEntity);

                        if (radioGroupSelectFilter.SelectedIndex==1)
                        {
                            chkCboxInternalGroup.Enabled = false;
                        }
                        else
                        {
                            chkCboxInternalGroup.Enabled = true;
                        }

                    }
                }                
            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message, "Jet-Скидки", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }



        /// <summary>
        /// Загружаем признак для фильтра привязки
        /// </summary>
        /// <param name="bIsEntity"></param>
        private void LoadSelectFilter(bool bIsEntity)
        {
            if (bIsEntity)
            {
                radioGroupSelectFilter.SelectedIndex = 1;
            }
            else
            {
                radioGroupSelectFilter.SelectedIndex = 0;
            }
        }

        /// <summary>
        ///  Загружаем в TreeList скидки по количеству
        /// </summary>
        /// <param name="uidAction"></param>
        private void LoadDiscountCountInTreeList(Guid uidAction)
        {
            DiscountCountGoodsEO disCountEO = new DiscountCountGoodsEO();

            lstDiscountCountGoodsEo = disCountEO.GetDiscountCountByAction(uidAction);
            if (lstDiscountCountGoodsEo != null)
            {
                trDiscountCount.Nodes.Clear();
                foreach (DiscountCountGoodsEO item in lstDiscountCountGoodsEo)
                {
                    DevExpress.XtraTreeList.Nodes.TreeListNode objNode = trDiscountCount.AppendNode(new object[] { item.Dcg_Guid, item.Dcg_CountValueMin, item.Dcg_CountValueMax, item.Dcg_PercentDiscount, item.Dcg_IsActive }, null);
                    objNode.Tag = item;
                }
            }
        }


        /// <summary>
        /// Загружаем в TreeList скидки по времени действия
        /// </summary>
        /// <param name="uidAction">Guid акции</param>
        private void LoadDiscountTimeInTreeList(Guid uidAction)
        {
            DiscountTimeEO disTimeEO = new DiscountTimeEO();

            lstDiscountTimeEo = disTimeEO.GetDiscountTimeByAction(uidAction);

            if (lstDiscountTimeEo != null)
            {
                trDiscountTime.Nodes.Clear();
                foreach (DiscountTimeEO item in lstDiscountTimeEo)
                {
                    DevExpress.XtraTreeList.Nodes.TreeListNode objNode = trDiscountTime.AppendNode(new object[] { item.Dt_Guid, item.Dt_TimeBegin, item.Dt_TimeEnd, item.Dt_PercentDiscount, item.Dt_IsActive }, null);
                    objNode.Tag = item;
                }
            }
        }



        private void LoadCheckListPharmacy(System.Guid uid)
        {
            PharmacyEO phEo = new PharmacyEO();
            List<Guid> lstPharm= phEo.GetPatternGuidForPharmacy(uid);

            UnCheckListPharmacy(); // временно законментил

            if (lstPharm.Count > 0)
            {
                foreach (Guid guid in lstPharm)
                {
                    foreach (TreeListNode objItem in trPharm.Nodes)
                    {
                        if ((System.Guid)objItem.GetValue(cGuidPharm) == guid)
                        {
                            objItem.SetValue(cChkPharm, true /*CheckState.Checked*/);
                            break;
                        }
                    }
                }            
            }
        }

        /// <summary>
        /// Снимаем выделение со всех элементов
        /// </summary>
        private void UnCheckListPharmacy()
        {
            foreach (TreeListNode objItem in trPharm.Nodes)
            {             
                if ((System.Boolean)objItem.GetValue(cChkPharm) == true)
                {
                    objItem.SetValue(cChkPharm, false /*CheckState.Unchecked*/);
                }
            }
        }


        

        #region Заполнение CheckedComboBoxEdit справочников, которые были сохранены вместе с акцией
        /// <summary>
        /// Загрузить позиции по группам которые были отмечены при поиске  
        /// </summary>
        /// <param name="uid">guid акции</param>
        private void LoadCheckCBoxGroup(System.Guid uid, bool bIsEntity)
        {
            List<string> strListGroup;

            UncheckedAll(chkCboxGroup);
            //var t = chkCboxGroup.Properties.GetCheckedItems();
            GroupEO grEo = new GroupEO();

            if (chkCboxGroup.Properties.Items.Count == 0) { LoadGroupList(grEo); }

            if (!bIsEntity)
            {
                string strPatternGroup = grEo.GetPatternStrForGroup(uid); // получаем строку с разделителями
                if (strPatternGroup == "") return;

                strListGroup = strPatternGroup.Split('^').Select(s => s.Trim()).ToList(); // конвертируем из string в List<string> разделителем строк должна быть '^', попутно удаляя пробелы
            }
            else
            {
                // вызвать метод, который вернёт List<string> с названиями групп, которые был прописаны у текущей акции (uid)
                strListGroup = grEo.GetListGroupName(uid); // если будут проблемы с "пробелом", отсечь их через Trim()
            }
           
            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListGroup
            CBoxEditChecked(strListGroup, chkCboxGroup);
        }

        /// <summary>
        /// Загрузить позиции по подгруппам которые были отмечены при поиске  
        /// </summary>
        /// <param name="uid">guid акции</param>
        private void LoadCheckCBoxSubGroup(System.Guid uid, bool bIsEntity)
        {
            List<string> strListSubGroup;
            SubGroupEO grSubEo = new SubGroupEO();

            UncheckedAll(chkCboxSubGroup);
            //var t= chkCboxSubGroup.Properties.GetCheckedItems();

            if (chkCboxSubGroup.Properties.Items.Count == 0) { LoadSubGroupList(grSubEo); }

            if (!bIsEntity)
            {
                string strPatternSubGroup = grSubEo.GetPatternStrForSubGroup(uid); // получаем строку с разделителями
                if (strPatternSubGroup == "") return;

                strListSubGroup = strPatternSubGroup.Split('^').Select(s => s.Trim()).ToList(); // конвертируем из string в List<string> разделителем строк должна быть '^', попутно удаляя пробелы
            }
            else
            {
                strListSubGroup = grSubEo.GetListSubGroupName(uid);
            }

            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListSubGroup
            CBoxEditChecked(strListSubGroup, chkCboxSubGroup);
        }

        /// <summary>
        /// Загрузить позиции по подгруппам которые были отмечены при поиске  
        /// </summary>
        /// <param name="uid">guid акции</param>
        private void LoadCheckCBoxLine(System.Guid uid, bool bIsEntity)
        {
            List<string> strList;
            LineEO lineEO = new LineEO();

            UncheckedAll(chkCboxLine);
            if (chkCboxLine.Properties.Items.Count == 0) { LoadLineList(lineEO); }

            if (!bIsEntity)
            {
                string strPattern = lineEO.GetPatternLine(uid); // получаем строку с разделителями
                if (strPattern == "") return;

                strList = strPattern.Split('^').Select(s => s.Trim()).ToList(); // конвертируем из string в List<string> разделителем строк должна быть '^', попутно удаляя пробелы
            }
            else
            {
                strList = lineEO.GetListLineName(uid);
            }

            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListSubGroup
            CBoxEditChecked(strList, chkCboxLine);
        }

        /// <summary>
        /// Загрузить позиции по подгруппам которые были отмечены при поиске  
        /// </summary>
        /// <param name="uid">guid акции</param>
        private void LoadCheckCBoxTradeMark(System.Guid uid, bool bIsEntity)
        {
            List<string> strList;
            TrademarkEO trMarkEO = new TrademarkEO();

            UncheckedAll(chkCboxTradeMark);
            if (chkCboxTradeMark.Properties.Items.Count == 0) { LoadTradeMarkList(trMarkEO); }
            
            if (!bIsEntity)
            {
                string strPattern = trMarkEO.GetPatternTradeMark(uid); // получаем строку с разделителями
                if (strPattern == "") return;

                strList = strPattern.Split('^').Select(s => s.Trim()).ToList(); // конвертируем из string в List<string> разделителем строк должна быть '^', попутно удаляя пробелы
            }
            else
            {
                strList = trMarkEO.GetListTrademarkName(uid);
            }

            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListSubGroup
            CBoxEditChecked(strList, chkCboxTradeMark);
        }

        private void LoadCheckCBoxInternalGroup(System.Guid uid)
        {
            UncheckedAll(chkCboxInternalGroup);
            if (chkCboxInternalGroup.Properties.Items.Count == 0) { LoadInternalGroupList(); }

            InternalGroupEO intgrEO = new InternalGroupEO();
            string strPattern = intgrEO.GetPatternInternalGroup(uid); // получаем строку с разделителями
            if (strPattern == "") return;

            List<string> strList = strPattern.Split('^').Select(s => s.Trim()).ToList(); // конвертируем из string в List<string> разделителем строк должна быть '^', попутно удаляя пробелы

            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListSubGroup
            CBoxEditChecked(strList, chkCboxInternalGroup);
        }

        private void LoadCheckCBoxProducer(System.Guid uid, bool bIsEntity)
        {
            List<string> strList;
            List<Guid> uidList;
            ProducerEO prodEO = new ProducerEO();

            UncheckedAll(chkCboxProducer);
            if (chkCboxProducer.Properties.DataSource == null) { LoadProduserList(); }
            //if (chkCboxProducer.Properties.Items.Count == 0) { LoadProduserList(); } // возвращается Items.Count == 0 даже есть записи. Всё потому, что элемент физически загружает в себя данные, только при обращении к нему из интерфейса. Это сделно DevExpress-om для повышения производительности

            if (!bIsEntity)
            {

                string strPattern = prodEO.GetPatternProducer(uid); // получаем строку с разделителями
                //if (strPattern == "") return;

                strList = strPattern.Split('^').Select(s => s.Trim()).ToList(); // конвертируем из string в List<string> разделителем строк должна быть '^', попутно удаляя пробелы
                
                // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListSubGroup
                CBoxEditChecked(strList, chkCboxProducer);
            }
            else
            {
                uidList = prodEO.GetListProducerName(uid); // получаем List<Guid> производителей, которые привязаны к акции uid
                //strList = uidList.Select(f => f.ToString()).ToList();
                
                string combindedString = string.Join("^ ", uidList); // склеиваем строку из List
                chkCboxProducer.SetEditValue(combindedString); // выделяем chkCboxProducer нужные элементы
            }
            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strListSubGroup
            //CBoxEditChecked(strList,chkCboxProducer);
        }


        private void CBoxEditChecked(List<string> strList, DevExpress.XtraEditors.CheckedComboBoxEdit CBoxEdit)
        {
            // устанавливаем CheckState.Checked в общем списке, для позиций которые были в strList
            foreach (string item in strList)
            {
                for (int i = 0; i < CBoxEdit.Properties.Items.Count; i++)
                {
                    if (CBoxEdit.Properties.Items[i].Value.ToString() == item)
                    {
                        CBoxEdit.Properties.Items[i].CheckState = CheckState.Checked;
                        break;
                    }
                }
            }
        }

        private void UncheckedAll(DevExpress.XtraEditors.CheckedComboBoxEdit CBoxEdit)
        {
            for (int i = 0; i < CBoxEdit.Properties.Items.Count; i++)
            {
                CBoxEdit.Properties.Items[i].CheckState = CheckState.Unchecked;
            }   
        }

        #endregion

        private void grdActionView_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
        {
            // закоментил при переходе от грида к треелисту
            //LoadActionDetail(e.FocusedRowHandle);
        }

        private void trAction_FocusedNodeChanged(object sender, FocusedNodeChangedEventArgs e)
        {
            LoadActionDetail(e.Node.Id);
            trAction.FocusedNode = e.Node;
        }

        private void trPharm_NodesReloaded(object sender, EventArgs e)
        {
            // при первом запуск всегда ноль
            //int iRow = grdActionView.FocusedRowHandle;

            int iRow = trAction.FocusedNode.Id;
            

            //if (grdActionView.RowCount > 0)
            if (trAction.VisibleNodesCount>0)
            {
                //Guid uid = System.Guid.Parse(grdActionView.GetRowCellDisplayText(iRow, grdActionView.Columns["GuidId"]));  // рабочий вариант    
                Guid uid = System.Guid.Parse((trAction.Nodes[iRow].GetValue(clGuidAction).ToString())); // получаем GUID выделенной строки в trAction
                
                //UnCheckListPharmacy();
                LoadCheckListPharmacy(uid);
            }
            //MessageBox.Show("trPharm_NodesReloaded");
        }

        private void grdAction_Load(object sender, EventArgs e)
        {
            //MessageBox.Show("grdAction_Load");
            //grdActionView.CancelSelection();
            //grdActionView.UnselectRow(0);
        }

        private void chkCboxGroup_VisibleChanged(object sender, EventArgs e)
        {
            //MessageBox.Show("VisibleChanged");

            //MessageBox.Show(chkCboxGroup.Properties.Items.Count.ToString());

            //int iRow = grdActionView.FocusedRowHandle;

            //if (grdActionView.RowCount > 0)
            //{
            //    Guid uid = System.Guid.Parse(grdActionView.GetRowCellDisplayText(iRow, grdActionView.Columns["GuidId"]));  // рабочий вариант    
            //    LoadCheckCBoxGroup(uid);
            //}
        }

        private void chkCboxGroup_Properties_Validating(object sender, CancelEventArgs e)
        {
            //MessageBox.Show(chkCboxGroup.Properties.Items.Count.ToString());
        }



        private void chkCboxGroup_GetItemEnabled(object sender, GetCheckedComboBoxItemEnabledEventArgs e)
        {
            //MessageBox.Show(chkCboxGroup.Properties.Items.Count.ToString());
        }



        private void chkCboxGroup_PropertiesChanged(object sender, EventArgs e)
        {
            //MessageBox.Show(chkCboxGroup.Properties.Items.Count.ToString());
        }

        private void frmDiscounts_Shown(object sender, EventArgs e)
        {


        }

        private void grdSelectView_DataSourceChanged(object sender, EventArgs e)
        {
            //MessageBox.Show("grdSelectView_DataSourceChanged");
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            // сохраняем акции
            SaveAction();

            // сохраняем отметки о выбраных/не выбранных аптеках
            SavePharmacy();


            if (radioGroupSelectFilter.SelectedIndex==0)
            {
                // добавление товарные позиции 
                SaveGoods();
            }
            else
            {
                // добавляем сущности
                SaveEntity();
            }

            // сохранение скидок
            SaveDiscount();

        }

       
        /// <summary>
        /// Сохранение информации о выбраных/не выбранных аптеках
        /// </summary>
        private void SavePharmacy()
        {
            PharmacyLinkEO phLinkEO = new PharmacyLinkEO();

            if (lasPharmLinkForSave == null) { lasPharmLinkForSave = new List<PharmacyLinkEO>(); }
            if (lasPharmLinkForDel == null) { lasPharmLinkForDel = new List<PharmacyLinkEO>(); }

            foreach (DevExpress.XtraTreeList.Nodes.TreeListNode objNode in trPharm.Nodes)
            {
                if (objNode.Tag == null) { continue; }
                if (Convert.ToBoolean(objNode.GetValue(cChkPharm)))
                {
                    System.Guid ph_guid = (Guid)objNode.GetValue(cGuidPharm);
                    
                    //System.Guid a_guid = System.Guid.Parse(grdActionView.GetRowCellValue(Convert.ToInt32(grdActionView.GetSelectedRows().Single()), clGuidgrdAction).ToString());
                    System.Guid a_guid = System.Guid.Parse(trAction.FocusedNode.GetValue(clGuidAction).ToString());

                    lasPharmLinkForSave.Add(new PharmacyLinkEO(System.Guid.NewGuid(), ph_guid, a_guid));
                }
                else
                {
                    System.Guid ph_guid = (Guid)objNode.GetValue(cGuidPharm);
                    System.Guid a_guid = System.Guid.Parse(trAction.FocusedNode.GetValue(clGuidAction).ToString());
                    lasPharmLinkForDel.Add(new PharmacyLinkEO(System.Guid.Empty, ph_guid, a_guid));
                }
            }

            // Insert
            if (lasPharmLinkForSave != null && lasPharmLinkForSave.Count > 0)
            {
                phLinkEO.Insert(lasPharmLinkForSave);             
            }
            
            // Delete
            if (lasPharmLinkForDel != null && lasPharmLinkForDel.Count > 0)
            {
                // удаляем дубликаты
                lasPharmLinkForDel=phLinkEO.RemoveDuplicate(lasPharmLinkForDel);
                phLinkEO.Delete(lasPharmLinkForDel);
            }
        }

        /// <summary>
        /// Сохранение информации о добавленных/удаленный позициях товара
        /// </summary>
        private void SaveGoods()
        {
            bool bflDel, bflAdd;
            
            GoodDiscountLinkEO gdl = new GoodDiscountLinkEO();

            if (lstGoodDiscountLinkForAdd != null )
            {
                bflAdd = gdl.Insert(lstGoodDiscountLinkForAdd);   // операция ADD
                if (bflAdd)
                {
                    lstGoodDiscountLinkForAdd.Clear();
                }

                LoadGoodsByCurrentAction();
            }

            if (lstGuidGdlForDelete != null )
            {
                bflDel = gdl.Delete(lstGuidGdlForDelete);       // операция Delete  
                if (bflDel)
                {
                    lstGuidGdlForDelete.Clear();
                }

                LoadGoodsByCurrentAction();
            }
        }
    
       
        /// <summary>
        /// сохранение скидок
        /// </summary>
        private void SaveDiscount() 
        {
            // скидки по количеству
            if (lstDiscountCountGoodsEoForSave == null) { lstDiscountCountGoodsEoForSave = new List<DiscountCountGoodsEO>(); }
            foreach (DevExpress.XtraTreeList.Nodes.TreeListNode objNode in trDiscountCount.Nodes)
            {
                if (objNode.Tag == null) { continue; }
                lstDiscountCountGoodsEoForSave.Add((DiscountCountGoodsEO)objNode.Tag);
            }

            if (lstDiscountCountGoodsEoForDel == null) { lstDiscountCountGoodsEoForDel = new List<DiscountCountGoodsEO>(); }
            
            DiscountCountGoodsEO objDisCoount = new DiscountCountGoodsEO();
            objDisCoount.Save(lstDiscountCountGoodsEoForSave, lstDiscountCountGoodsEoForDel, uidAction);


            //  скидки по времени действия
            if (lstDiscountTimeEoForSave == null) { lstDiscountTimeEoForSave = new List<DiscountTimeEO>(); }
            foreach (DevExpress.XtraTreeList.Nodes.TreeListNode objNode in trDiscountTime.Nodes)
            {
                if (objNode.Tag == null) { continue; }
                lstDiscountTimeEoForSave.Add((DiscountTimeEO)objNode.Tag); 
            }

            if (lstDiscountTimeEoForDel==null) {lstDiscountTimeEoForDel = new List<DiscountTimeEO>();}
            
            DiscountTimeEO objDisTime = new DiscountTimeEO();
            objDisTime.Save(lstDiscountTimeEoForSave, lstDiscountTimeEoForDel, uidAction);

        }

        /// <summary>
        ///  Сохраняем информацию о сущностях товара (группа, подгруппа, производитель и т.д.)
        /// </summary>
        private void SaveEntity()
        {
            uidAction = System.Guid.Parse(trAction.FocusedNode.GetValue(clGuidAction).ToString()); // получаем GUID выделенной строки в trAction
            
            GroupEO objGroupEo = new GroupEO();
            objGroupEo.Save(lstGroupEoForSave, uidAction);


            //-- проверить как работает

            SubGroupEO objSubGroupEo= new SubGroupEO();
            objSubGroupEo.Save(lstSubGroupEoForSave, uidAction); // реализовать метод save

            TrademarkEO objTradeMarkEo = new TrademarkEO();
            objTradeMarkEo.Save(lstTradeMarkEoForSave, uidAction);

            LineEO objLineEo = new LineEO();
            objLineEo.Save(lstLineEoFoSave, uidAction);

            ProducerEO objProducer = new ProducerEO();
            objProducer.Save(lstProducerEoForSave,uidAction);


        }

        /// <summary>
        /// Сохраняем акции
        /// </summary>
        private void SaveAction()
        {
            if (lstActionEOForSave == null) { lstActionEOForSave = new List<ActionEO>(); }
            foreach (DevExpress.XtraTreeList.Nodes.TreeListNode objNode in trAction.Nodes)
            {
                if (objNode.Tag == null) { continue; }
                lstActionEOForSave.Add((ActionEO)objNode.Tag);       
            }

            if (lstActionEOForDel == null) { lstActionEOForDel = new List<ActionEO>(); }

            ActionEO objAction = new ActionEO();
            objAction.Save(lstActionEOForSave, lstActionEOForDel, uidAction); 
        }


        /// <summary>
        /// Загрузить данные по товару, который участвует в текущей акции
        /// </summary>
        private void LoadGoodsByCurrentAction()
        {
            PreSelectdProductEO goodEO = new PreSelectdProductEO();
            // получаем Guid выделенной в гриде акции
            //Guid uid = System.Guid.Parse(grdActionView.GetRowCellValue(Convert.ToInt32(grdActionView.GetSelectedRows().Single()), clGuidgrdAction).ToString());
            Guid uid = System.Guid.Parse(trAction.FocusedNode.GetValue(clGuidAction).ToString());
            // загружаем товары, которые привязаны к данной (uid) акции
            grdSelect.DataSource = goodEO.GetGoodByAction(uid);
        }
        

        private void mItemgrdSelectDel_Click(object sender, EventArgs e)
        {
            try
            {
                DeletegrdSelectItem(grdSelectView.GetSelectedRows().SingleOrDefault());
            }
            catch (Exception f)
            {
                //SendMessageToLog("mItemgrdSelectDel_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void mItemgrdSelectAll_Click(object sender, EventArgs e)
        {
            try
            {
                // Этот метод не дописан и не работает - отладить 25.05.2013 
                DialogResult dlg = MessageBox.Show("Вы действительно хотите удалить все позиции ?", "Jet-Discount",MessageBoxButtons.YesNo, MessageBoxIcon.Question,MessageBoxDefaultButton.Button2);
                
                if (dlg==DialogResult.Yes)
                {
                    int n = grdSelectView.RowCount;
                    for (int i = 0; i < n; i++)
                    {
                        DeletegrdSelectItem(i);
                    }     
                }
            }
            catch (Exception f)
            {
                //SendMessageToLog("mItemgrdSelectDel_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;

        }

        /// <summary>
        /// Удаляет из списка
        /// </summary>
        /// <param name="iRow">№ строки</param>
        private void DeletegrdSelectItem(int iRow)
        {
            try
            {
                if (grdSelectView.DataRowCount == 0)
                {
                    return;
                }

                if (lstGuidGdlForDelete == null)
                {
                    lstGuidGdlForDelete = new List<Guid>();
                }
                
                DiscountsDAL.whGood rowWhGood = (DiscountsDAL.whGood)grdSelectView.GetRow(iRow);
                lstGuidGdlForDelete.Add(rowWhGood.UId);

                grdSelectView.DeleteSelectedRows();



                //if (lstGoodDiscountLinkForDelete == null)
                //{
                //    lstGoodDiscountLinkForDelete = new List<GoodDiscountLinkEO>();
                //}
                
                //GoodDiscountLinkEO gdl = new GoodDiscountLinkEO();

                //IQueryable rez = gdl.GetGoodDiscountLinkItem(rowWhGood.UId);

                //foreach (T_GoodDiscountLink item in rez)
                //{
                //    gdl.whGood_Id = item.whGood_Id; //.whGood_ID; 
                //    gdl.whGood_Uid = item.whGood_Uid.Value; //rowWhGood.UId; 
                //    gdl.A_Guid = item.A_Guid; // System.Guid.Parse(grdActionView.GetRowCellValue(Convert.ToInt32(grdActionView.GetSelectedRows().Single()), clGuidgrdAction).ToString());
                //    gdl.D_Guid = item.D_Guid.Value;
                //    lstGoodDiscountLinkForDelete.Add(gdl);
                //}

                //trDiscountCount.Nodes.Remove(objNode);
                //if (objPrevNode == null)
                //{
                //    if (trDiscountCount.Nodes.Count > 0)
                //    {
                //        trDiscountCount.FocusedNode = trDiscountCount.Nodes[0];
                //    }
                //}
                //else
                //{
                //    trDiscountCount.FocusedNode = objPrevNode;
                //}

               
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка удаления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void xtraTabControl2_Click(object sender, EventArgs e)
        {

        }

        private void trPharm_CellValueChanging(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
        {
            try
            {
                //if (lasPharmLink==null)
                //{
                //    lasPharmLink = new List<PharmacyLinkEO>();
                //}

                //lasPharmLink.Add(new PharmacyLinkEO());
                //System.Int32 iPosNode = trPharm.GetNodeIndex(e.Node);

                //var u= e.Node.GetValue(cChkPharm);
            }
            catch (Exception)
            {
                throw;
            }
        }

        private void trPharm_CellValueChanged(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
        {
            //if (lasPharmLinkForAdd == null)
            //{
            //    lasPharmLinkForAdd = new List<PharmacyLinkEO>();
            //}

            /*
            if (lasPharmLinkForDel == null)
            {
                lasPharmLinkForDel = new List<PharmacyLinkEO>();
            }
            */
            //System.Guid a_guid = System.Guid.Parse(grdActionView.GetRowCellValue(Convert.ToInt32(grdActionView.GetSelectedRows().Single()), clGuidgrdAction).ToString());
            /*
            System.Guid a_guid = System.Guid.Parse(trAction.FocusedNode.GetValue(clGuidAction).ToString());
            System.Guid ph_guid = (Guid)e.Node.GetValue(cGuidPharm);

            if (Convert.ToBoolean(e.Node.GetValue(cChkPharm)))
            {
                //lasPharmLinkForAdd.Add(new PharmacyLinkEO(System.Guid.NewGuid(), ph_guid, a_guid));
            }
            else
            {
                lasPharmLinkForDel.Add(new PharmacyLinkEO(System.Guid.Empty, ph_guid, a_guid));
            }
            */
            //System.Int32 iPosNode = trPharm.GetNodeIndex(e.Node);
            //var u = e.Node.GetValue(cChkPharm);
        }

        private void trDiscountCount_CellValueChanging(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
        {
            try
            {
                System.Boolean bChanging = false;

                if (e.Column == cCountBegintrDiscountCount && (e.Value != ""))
                {
                    ((DiscountCountGoodsEO)e.Node.Tag).Dcg_CountValueMin = Convert.ToInt32(e.Value);
                    e.Node.SetValue(cCountBegintrDiscountCount, e.Value);
                    bChanging = true;
                }

                if (e.Column == cCountEndtrDiscountCount && (e.Value != ""))
                {
                    ((DiscountCountGoodsEO)e.Node.Tag).Dcg_CountValueMax = Convert.ToInt32(e.Value);
                    e.Node.SetValue(cCountEndtrDiscountCount, e.Value);
                    bChanging = true;
                }

                if (e.Column == cPercentValueDiscountCount && (e.Value != ""))
                {
                    string sValue=e.Value.ToString().Replace('.', ',');

                    ((DiscountCountGoodsEO)e.Node.Tag).Dcg_PercentDiscount = Convert.ToDouble(sValue);
                    e.Node.SetValue(cPercentValueDiscountCount, sValue);
                    bChanging = true;
                }

                if (e.Column == cIsActiveDiscountCount && (e.Value != ""))
                {
                    ((DiscountCountGoodsEO)e.Node.Tag).Dcg_IsActive = Convert.ToBoolean(e.Value);
                    e.Node.SetValue(cIsActiveDiscountCount, e.Value);
                    bChanging = true;
                }

                if (bChanging)
                {
                    ((DiscountCountGoodsEO) e.Node.Tag).bIsUpdate = true;
                }

            }
            catch (Exception)
            {
                
                throw;
            }
        }

        private void btnCansel_Click(object sender, EventArgs e)
        {
           
        }

        private void barBtnItemActionEdit_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (barBtnItemActionEdit.Checked)
            {
                //mItemActionAdd.Visible = false;
                //mItemActionDelete.Visible = false;
                //contMenuAction.Visible = true;

                ActionAllowEdit(true);
            }
            else
            {
                //contMenuAction.Visible = false;
                ActionAllowEdit(false);
                //MessageBox.Show("!!!");
            }

            
        }

        private void ActionAllowEdit(bool bValue)
        {
            clGuidAction.OptionsColumn.AllowEdit = bValue;
            clNameAction.OptionsColumn.AllowEdit = bValue;
            clDiscriptionAction.OptionsColumn.AllowEdit = bValue;
            clIsDeleteAction.OptionsColumn.AllowEdit = bValue;
            clIsActiveAction.OptionsColumn.AllowEdit = bValue;
            clDateBeginAction.OptionsColumn.AllowEdit = bValue;
            clDateEndAction.OptionsColumn.AllowEdit = bValue;
        }



        #region Обработчики событий меню Action

        private void mItemActionAdd_Click(object sender, EventArgs e)
        {
            try
            {
                AddActionItem();
            }
            catch (Exception f)
            {
                MessageBox.Show("mItemActionAdd_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void mItemActionDelete_Click(object sender, EventArgs e)
        {
            try
            {
                DeleteActionItem(trAction.FocusedNode);
            }
            catch (Exception f)
            {
                MessageBox.Show("mItemActionDelete_Click.\n Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void trAction_MouseClick(object sender, MouseEventArgs e)
        {
            try
            {
                if (e.Button == MouseButtons.Right)
                {
                    if (!barBtnItemActionEdit.Checked)
                    {
                        return;
                    }

                    // попробуем определить, что же у нас под мышкой
                    TreeListHitInfo hi = ((TreeList) sender).CalcHitInfo(new Point(e.X, e.Y));
                    if ((hi == null) || (hi.Node == null))
                    {
                        mItemActionDelete.Enabled = false;
                    }
                    else
                    {
                        // выделяем узел
                        mItemActionDelete.Enabled = true;
                        hi.Node.TreeList.FocusedNode = hi.Node;
                    }
                    contMenuAction.Show(((TreeList) sender), new Point(e.X, e.Y));

                }
            }
            catch (Exception f)
            {
                MessageBox.Show("trAction_MouseClick_MouseClick. Текст ошибки: " + f.Message);
                //SendMessageToLog("trDiscountCount_MouseClick. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        #endregion

        /// <summary>
        /// Добавляет в список акцию
        /// </summary>
        private void AddActionItem()
        {
            try
            {
                if (trAction.Enabled == false) { trAction.Enabled = true; }

                Boolean bValidNode = false;

                bValidNode = ValidateTrAction(trAction);
                if (bValidNode == false) { return; }

                //DiscountCountGoodsEO discountCountGoods = new DiscountCountGoodsEO();
                ActionEO actionEO= new ActionEO();

                TreeListNode objNode = trAction.AppendNode(new object[] { actionEO.GuidId /*здесь по умолчанию будет Guid.Empty()*/, actionEO.Name, actionEO.Discription, actionEO.IsDelete, actionEO.IsActive, actionEO.TimeBegin, actionEO.TimeEnd }, null);
                objNode.Tag = actionEO;
                trAction.FocusedNode = objNode;
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка добавления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private bool ValidateTrAction(TreeList treeList)
        {
            // если есть строка которая не заполнена значениями
            foreach (TreeListNode objItem in treeList.Nodes)
            {
                if (System.String.IsNullOrWhiteSpace((System.String)objItem.GetValue(clNameAction)))
                {
                    trAction.SetColumnError(clNameAction, "Название акции не заполнено");
                    trAction.FocusedNode = objItem;
                    return false;
                }

                if (objItem.GetValue(clDateBeginAction)==null) 
                {
                    trAction.SetColumnError(clDateBeginAction, "Поле не заполнено");
                    trAction.FocusedNode = objItem;
                    return false;
                }

                if (objItem.GetValue(clDateEndAction) == null)
                {
                    trAction.SetColumnError(clDateEndAction, "Поле не заполнено");
                    trAction.FocusedNode = objItem;
                    return false;
                }
            }
            return true;
        }

        /// <summary>
        /// Удаляем из списка
        /// </summary>
        /// <param name="objNode">узел с телефонным номером</param>
        private void DeleteActionItem(TreeListNode objNode)
        {
            try
            {
                if ((objNode == null) || (trAction.Nodes.Count == 0))
                {
                    return;
                }

                if (lstActionEOForDel == null) { lstActionEOForDel = new List<ActionEO>(); }

                TreeListNode objPrevNode = objNode.PrevNode;
                lstActionEOForDel.Add((ActionEO)objNode.Tag);

                trAction.Nodes.Remove(objNode);
                if (objPrevNode == null)
                {
                    if (trAction.Nodes.Count > 0)
                    {
                        trAction.FocusedNode = trAction.Nodes[0];
                    }
                }
                else
                {
                    trAction.FocusedNode = objPrevNode;
                }

                //SetPropertiesModified(true);
            }
            catch (Exception f)
            {
                //SendMessageToLog("Ошибка удаления телефонного номера. Текст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void trAction_CellValueChanging(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
        {
            try
            {
                System.Boolean bChanging = false;

                if (e.Column == clNameAction && (e.Value != ""))
                {
                    ((ActionEO)e.Node.Tag).Name = Convert.ToString(e.Value);
                    e.Node.SetValue(clNameAction, e.Value);
                    bChanging = true;
                }

                if (e.Column == clDiscriptionAction && (e.Value != ""))
                {
                    ((ActionEO)e.Node.Tag).Discription = Convert.ToString(e.Value);
                    e.Node.SetValue(clDiscriptionAction, e.Value);
                    bChanging = true;
                }

                if (e.Column == clIsActiveAction && (e.Value != ""))
                {
                    //string sValue = e.Value.ToString().Replace('.', ',');
                    ((ActionEO)e.Node.Tag).IsActive = Convert.ToBoolean(e.Value);
                    e.Node.SetValue(clIsActiveAction, e.Value);
                    bChanging = true;
                }

                if (e.Column == clDateBeginAction && (e.Value != ""))
                {
                    ((ActionEO)e.Node.Tag).TimeBegin = Convert.ToDateTime(e.Value);
                    e.Node.SetValue(clDateBeginAction, e.Value);
                    bChanging = true;
                }

                if (e.Column == clDateEndAction && (e.Value != ""))
                {
                    ((ActionEO)e.Node.Tag).TimeEnd = Convert.ToDateTime(e.Value);
                    e.Node.SetValue(clDateEndAction, e.Value);
                    bChanging = true;
                }

                if (bChanging)
                {
                    ((ActionEO)e.Node.Tag).IsRowUpdate = true;
                }

            }
            catch (Exception)
            {

                throw;
            }
        }

        private void trAction_ValidateNode(object sender, ValidateNodeEventArgs e)
        {
            try
            {
                if ((e.Node[clNameAction] == null) || ( System.String.IsNullOrWhiteSpace((System.String)e.Node[clNameAction]) ))
                {
                    e.Valid = false;
                    trAction.SetColumnError(clNameAction, "Название акции не заполнено");
                }
            }
            catch (System.Exception f)
            {
                MessageBox.Show("treeListEMail_ValidateNode.\nТекст ошибки: " + f.Message);
            }
            finally
            {
            }
            return;
        }

        private void trDiscountTime_CellValueChanging(object sender, DevExpress.XtraTreeList.CellValueChangedEventArgs e)
        {
            try
            {
                System.Boolean bChanging = false;

                if (e.Column == cTimeBeginDiscountTime && (e.Value != ""))
                {
                    ((DiscountTimeEO)e.Node.Tag).Dt_TimeBegin = Convert.ToDateTime(e.Value);
                    e.Node.SetValue(cTimeBeginDiscountTime, e.Value);
                    bChanging = true;
                }

                if (e.Column == cTimeEndDiscountTime && (e.Value != ""))
                {
                    ((DiscountTimeEO)e.Node.Tag).Dt_TimeEnd = Convert.ToDateTime(e.Value);
                    e.Node.SetValue(cTimeEndDiscountTime, e.Value);
                    bChanging = true;
                }

                if (e.Column == cPercentValueDiscountTime && (e.Value != ""))
                {
                    string sValue = e.Value.ToString().Replace('.', ',');

                    ((DiscountTimeEO)e.Node.Tag).Dt_PercentDiscount = Convert.ToDouble(sValue);
                    e.Node.SetValue(cPercentValueDiscountTime, sValue);
                    bChanging = true;
                }

                if (e.Column == cIsActiveDiscountTime && (e.Value != ""))
                {
                    ((DiscountTimeEO)e.Node.Tag).Dt_IsActive = Convert.ToBoolean(e.Value);
                    e.Node.SetValue(cIsActiveDiscountTime, e.Value);
                    bChanging = true;
                }

                if (bChanging)
                {
                    ((DiscountTimeEO)e.Node.Tag).bIsUpdate = true;
                }

            }
            catch (Exception e2)
            {
                MessageBox.Show(e2.Message);
            }
        }

      

        private void radioGroupSelectFilter_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (radioGroupSelectFilter.SelectedIndex==1 )
            {
                bIsSelectBindingEntity = false;
                btnSelectAll.Enabled = false;
                btnTransferSelectRow.Enabled = false;

                grdSelect.Enabled = false;
            }
            else
            {
                bIsSelectBindingEntity = true;

                btnSelectAll.Enabled = true;
                btnTransferSelectRow.Enabled = true;

                grdSelect.Enabled = true;
            }


        }

        private void chkCboxGroup_EditValueChanged_1(object sender, EventArgs e)
        {
            var yy = chkCboxGroup.Properties.GetCheckedItems();
            var yy1 = chkCboxGroup.EditValue;
        }



       

    }
}
